package co.com.claro.vista.action.catalogo;

import co.com.claro.comun.fabrica.LanzarFabrica;
import co.com.claro.comun.od.FabricaTo;
import co.com.claro.comun.util.util;
import co.com.claro.servicio.negocio.ICatalogoServicio;
import co.com.claro.servicio.negocio.ILoginServicio;
import co.com.claro.servicio.od.*;
import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.log4j.Logger;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.util.ServletContextAware;

import javax.servlet.ServletContext;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;


/**
 * Created by IntelliJ IDEA.
 * User: Manuel Serrano
 * Date: 21/05/2010
 * Time: 11:33:39 AM
 * To change this template use File | Settings | File Templates.
 */
public class CatalogoAction extends ActionSupport implements ServletContextAware, SessionAware, Serializable {
    private static final Logger logger = Logger.getLogger(CatalogoAction.class);
    private FabricaTo fabrica;
    private UsuarioOd usuario;
    private ICatalogoServicio catalogoServicio;
    private String password;
    private String username;
    private String mensaje;
    private DataJson data = new DataJson();
    private String codigo;
    private String urlform;
    private Map session;
    private List<CatalogoOd> catalogos;
    private List<ServidorOd> servidores;
    private List<BaseDatosOd> basesdatos;
    private List<String> tabla;
    private List<String> tablaOrdenes;
    private OrdenOd orden;
    private Gson gson = new Gson();
    private String objetoJson;
    private List<OrdenOd> ordenes;
    private List<OrdenDetalleOd> ordenDetalle;
    private List<MovimientoOd> movimientos;


    public CatalogoAction() throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, IllegalAccessException, InstantiationException {
        LanzarFabrica.getInstancia(this);
    }


    public String execute() throws Exception {
        final String origen = "CatalogoAction.execute";
        long time;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act") + CatalogoAction.class + " | " + origen);

            time = System.currentTimeMillis();


            time = System.currentTimeMillis() - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act") + CatalogoAction.class + " | " + origen + " | " + time);


        } catch (Exception e) {
            logger.error(e);
        }
        return INPUT;
    }


    public String obtenerCatalogosEnFlujo() throws Exception {
        final String origen = "CatalogoAccion.obtenerCatalogosEnFlujo";
        long time;
        List<UsuarioOd> usuarios;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act") + CatalogoAction.class + " | " + origen);

            time = System.currentTimeMillis();

            data = gson.fromJson(this.objetoJson, DataJson.class);
            ordenes = getCatalogoServicio().obtenerCatalogosEnFlujo("", data.getOrdenes().get(0));

            if (ordenes.size() == 0) {
                codigo = "ERROR";
            } else {
                tabla = util.getTabTable(OrdenOd.class);
                tablaOrdenes = util.getTabTable(OrdenDetalleOd.class);
                codigo = "OK";
            }


            time = System.currentTimeMillis() - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act") + CatalogoAction.class + " | " + origen + " | " + time);


        } catch (Exception e) {
            logger.error(e);
        }
        return SUCCESS;
    }

    public String obtenerDetalleServidor() throws Exception {
        final String origen = "CatalogoAccion.obtenerDetalleServidor";
        long time;
        List<UsuarioOd> usuarios;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act") + CatalogoAction.class + " | " + origen);

            time = System.currentTimeMillis();

            data = gson.fromJson(this.objetoJson, DataJson.class);
            servidores = getCatalogoServicio().obtenerDetalleServidor("", data.getOrdendetalle().get(0));

            if (servidores.size() == 0) {
                codigo = "ERROR";
            } else {
                tabla = util.getTabTable(ServidorOd.class);
                codigo = "OK";
            }


            time = System.currentTimeMillis() - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act") + CatalogoAction.class + " | " + origen + " | " + time);


        } catch (Exception e) {
            logger.error(e);
        }
        return SUCCESS;
    }

    public String obtenerDetalleBaseDatos() throws Exception {
        final String origen = "CatalogoAccion.obtenerDetalleBaseDatos";
        long time;
        List<UsuarioOd> usuarios;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act") + CatalogoAction.class + " | " + origen);

            time = System.currentTimeMillis();

            data = gson.fromJson(this.objetoJson, DataJson.class);
            basesdatos = getCatalogoServicio().obtenerDetalleBaseDatos("", data.getOrdendetalle().get(0));

            if (basesdatos.size() == 0) {
                codigo = "ERROR";
            } else {
                tabla = util.getTabTable(BaseDatosOd.class);
                codigo = "OK";
            }


            time = System.currentTimeMillis() - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act") + CatalogoAction.class + " | " + origen + " | " + time);


        } catch (Exception e) {
            logger.error(e);
        }
        return SUCCESS;
    }

    public String obtenerMovimientos() throws Exception {
        final String origen = "CatalogoAccion.obtenerMovimientos";
        long time;
        List<UsuarioOd> usuarios;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act") + CatalogoAction.class + " | " + origen);

            time = System.currentTimeMillis();

            data = gson.fromJson(this.objetoJson, DataJson.class);
            movimientos = getCatalogoServicio().obtenerMovimientos("", data.getOrdenes().get(0));
            tabla = util.getTabTable(MovimientoOd.class);


            codigo = "OK";

            time = System.currentTimeMillis() - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act") + CatalogoAction.class + " | " + origen + " | " + time);


        } catch (Exception e) {
            logger.error(e);
        }
        return SUCCESS;
    }

    public String actualizarEstado() throws Exception {
        final String origen = "CatalogoAction.actualizarEstado";
        long time;
        boolean resultado = false;
        List<UsuarioOd> usuarios;
        try {

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.inicio.act") + CatalogoAction.class + " | " + origen);

            time = System.currentTimeMillis();

            data = gson.fromJson(this.objetoJson, DataJson.class);
            resultado = getCatalogoServicio().actualizarEstado("", data.getOrdenes().get(0));

            time = System.currentTimeMillis() - time;

            logger.info(ResourceBundle.getBundle("mensajeslogs").getString("mensaje.exitos.act") + CatalogoAction.class + " | " + origen + " | " + time);


        } catch (Exception e) {
            logger.error(e);
        }

        if (resultado) {
            codigo = "OK";
        } else {
            codigo = "ERROR";
        }

        return SUCCESS;
    }


    public FabricaTo getFabrica() {
        return fabrica;
    }

    public void setFabrica(FabricaTo fabrica) {
        this.fabrica = fabrica;
    }


    public void setServletContext(ServletContext context) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    public void setSession(Map<String, Object> session) {
        //To change body of implemented methods use File | Settings | File Templates.
        this.session = session;
    }


    public UsuarioOd getUsuario() {
        return usuario;
    }

    public void setUsuario(UsuarioOd usuario) {
        this.usuario = usuario;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }

    public DataJson getData() {
        return data;
    }

    public void setData(DataJson data) {
        this.data = data;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getUrlform() {
        return urlform;
    }

    public void setUrlform(String urlform) {
        this.urlform = urlform;
    }


    public ICatalogoServicio getCatalogoServicio() {
        return catalogoServicio;
    }

    public void setCatalogoServicio(ICatalogoServicio catalogoServicio) {
        this.catalogoServicio = catalogoServicio;
    }

    public List<CatalogoOd> getCatalogos() {
        return catalogos;
    }

    public void setCatalogos(List<CatalogoOd> catalogos) {
        this.catalogos = catalogos;
    }


    public List<String> getTabla() {
        return tabla;
    }

    public void setTab(List<String> tab) {
        this.tabla = tab;
    }

    public void setTabla(List<String> tabla) {
        this.tabla = tabla;
    }


    public String getObjetoJson() {
        return objetoJson;
    }

    public void setObjetoJson(String objetoJson) {
        this.objetoJson = objetoJson;
    }

    public List<OrdenOd> getOrdenes() {
        return ordenes;
    }

    public void setOrdenes(List<OrdenOd> ordenes) {
        this.ordenes = ordenes;
    }

    public List<MovimientoOd> getMovimientos() {
        return movimientos;
    }

    public void setMovimientos(List<MovimientoOd> movimientos) {
        this.movimientos = movimientos;
    }

    public List<String> getTablaOrdenes() {
        return tablaOrdenes;
    }

    public void setTablaOrdenes(List<String> tablaOrdenes) {
        this.tablaOrdenes = tablaOrdenes;
    }

    public List<OrdenDetalleOd> getOrdenDetalle() {
        return ordenDetalle;
    }

    public void setOrdenDetalle(List<OrdenDetalleOd> ordenDetalle) {
        this.ordenDetalle = ordenDetalle;
    }

    public List<ServidorOd> getServidores() {
        return servidores;
    }

    public void setServidores(List<ServidorOd> servidores) {
        this.servidores = servidores;
    }

    public List<BaseDatosOd> getBasesdatos() {
        return basesdatos;
    }

    public void setBasesdatos(List<BaseDatosOd> basesdatos) {
        this.basesdatos = basesdatos;
    }
}





